home *** CD-ROM | disk | FTP | other *** search
/ MacHome 1999 Game / Image.bin / Role Playing and Strategy / Starbound II.hqx / Starbound II / AI agents / Gypsum.rsrc / ss$t_144 < prev    next >
Encoding:
Text File  |  1998-05-14  |  4.5 KB  |  125 lines

  1. situation fleet_move
  2. vars
  3.    me : fleet;
  4.    f_fleet : fleet;
  5.    t_fleet : fleet;
  6.    angle : integer;
  7.    t_dist : integer;
  8.    success : boolean;
  9.    f_planet : planet;
  10.    t_planet : planet;
  11.    p_race : integer;
  12.    
  13. begin
  14.    // This section will be easier to write when the attachments are done
  15.    me := This_fleet();
  16.    // See if you can find any enemy fleets
  17.    t_fleet := nil;
  18.    f_fleet := First_fleet(-1);
  19.    while (f_fleet <> nil) do
  20.       begin
  21.          if (Get_fleet_race(f_fleet) <> Get_fleet_race(me)) then
  22.             begin
  23.                if (t_fleet = nil) then
  24.                   t_fleet := f_fleet;
  25.                else
  26.                   if (Distance(Get_fleet_x(me), Get_fleet_y(me),
  27.                                Get_fleet_x(f_fleet), Get_fleet_y(f_fleet)) <
  28.                       Distance(Get_fleet_x(me), Get_fleet_y(me),
  29.                                Get_fleet_x(t_fleet), Get_fleet_y(t_fleet))) then
  30.                      t_fleet := f_fleet;
  31.             end;
  32.          f_fleet := Next_fleet(f_fleet, -1);
  33.       end;
  34.    if (t_fleet <> nil) then
  35.       begin
  36.          // We've found a ship to go after so head toward it
  37.          while (Fleet_mp(me) > 0) do
  38.             begin
  39.                angle := Target_to_angle(Get_fleet_x(me), Get_fleet_y(me),
  40.                                         Get_fleet_x(t_fleet), Get_fleet_y(t_fleet));
  41.                t_dist := Distance(Get_fleet_x(me), Get_fleet_y(me),
  42.                                   Get_fleet_x(t_fleet), Get_fleet_y(t_fleet));
  43.                if (t_dist = 1) then
  44.                   begin
  45.                      // Attack enemy fleet
  46.                      success := Attack_fleet(angle);
  47.                      if (not success) then
  48.                         Skip();
  49.                   end;
  50.                else
  51.                   begin
  52.                      success := Move_fleet(angle);
  53.                      if (not success) then
  54.                         Skip();
  55.                   end;
  56.             end;
  57.       end;
  58.    else
  59.       begin
  60.          // Look for an enemy planet to attack
  61.          t_planet := nil;
  62.          f_planet := First_planet(-1);
  63.          while (f_planet <> nil) do
  64.             begin
  65.                p_race := Planet_race(f_planet);
  66.                if (p_race = -1) then
  67.                   begin
  68.                      // This planet has not yet been explored, head toward it
  69.                      t_planet := f_planet;
  70.                   end;
  71.                else if ((p_race <> Get_fleet_race(me)) and
  72.                         (p_race <> 100)) then
  73.                   begin
  74.                      if (t_planet = nil) then
  75.                         // Only make the target world an enemy world if you have no world seleted yet
  76.                         t_planet := f_planet;
  77.                   end;
  78.                f_planet := Next_planet(f_planet, -1);
  79.             end;
  80.          if (t_planet <> nil) then
  81.             begin
  82.                // Head toward target planet
  83.                while (Fleet_mp(me) > 0) do
  84.                   begin
  85.                      angle := Target_to_angle(Get_fleet_x(me), Get_fleet_y(me),
  86.                                               Planet_x(t_planet), Planet_y(t_planet));
  87.                      t_dist := Distance(Get_fleet_x(me), Get_fleet_y(me),
  88.                                         Planet_x(t_planet), Planet_y(t_planet));
  89.                      if (t_dist = 1) then
  90.                         begin
  91.                            // Attack enemy planet
  92.                            if ((Planet_race(t_planet) <> Get_fleet_race(me)) and
  93.                                (Planet_race(t_planet) <> 100)) then
  94.                               begin
  95.                                  success := Attack_fleet(angle);
  96.                                  if (not success) then
  97.                                     Skip();
  98.                               end;
  99.                            else
  100.                               Skip();
  101.                         end;
  102.                      else
  103.                         begin
  104.                            success := Move_fleet(angle);
  105.                            if (not success) then
  106.                               Skip();
  107.                         end;
  108.                   end;
  109.             end;
  110.          else
  111.             begin
  112.                // No target planet and no target fleet, head toward a random point
  113.                while (Fleet_mp(me) > 0) do
  114.                   begin
  115.                      angle := Random(6);
  116.                      success := Move_fleet(angle);
  117.                      if (not success) then
  118.                         Skip();
  119.                   end;
  120.             end;
  121.       end;
  122. end;
  123.  
  124.  
  125.